<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>变量提升</title>
</head>

<body>
  <script>
    /*
       变量提升是 JavaScript 中比较“奇怪”的现象，它允许在变量声明之前即被访问（仅存在于var声明变量）
       说明:
            - 变量提升出现在当前作用域的最前面
            -提升时，只提升变量声明，不提升变量赋值
            -let/const 声明的变量不存在变量提升
            -实际开发中推荐先声明再访问变量

        注意事项:
            JS初学者经常花很多时间才能习惯变量提升，还经常出现一些意想不到的bug，正因为如此，ES6 引入了块级作用域，
            用let 或者 const声明变量，让代码写法更加规范和人性化
    */

    var age
    //var 变量提升
    //1.变量提升会提升到当前作用域的最前面
    //2.只提升变量申明，不提升变量赋值
    console.log(age) //undefined
    age = 18
    console.log(age) //18

    function fn() {
        console.log(uname)
        var uname = 'andy'   
    }
    fn()
</script>
</body>

</html>